package cn.com.yto56.coresystem.logic.msg.soa.dao.impl;

import cn.com.yto56.coresystem.common.msg.util.SysConst;
import cn.com.yto56.coresystem.common.msg.util.base.StringUtils;
import cn.com.yto56.coresystem.common.msg.util.data.DataTypeChangeTool;
import cn.com.yto56.coresystem.common.msg.util.db.BaseJdbcUtil;
import cn.com.yto56.coresystem.common.msg.util.db.IPage;
import cn.com.yto56.coresystem.common.msg.util.db.QueryPage;
import cn.com.yto56.coresystem.common.msg.util.db.dao.annotation.JdbcDao;
import cn.com.yto56.coresystem.logic.msg.soa.dao.IUserGroupInfoDao;
import cn.com.yto56.coresystem.logic.msg.soa.domain.UserGroupInfoBean;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

/**
 * Created by wangrui on 2017/2/16.
 */
@JdbcDao(dataSource = "msg_database")
public class UserGroupInfoDaoImpl extends BaseJdbcUtil implements IUserGroupInfoDao {
    @Override
    public IPage<UserGroupInfoBean> search(UserGroupInfoBean userGroupInfoBean, QueryPage queryPage) {
        StringBuffer sb = new StringBuffer();
        sb.append("select * from " + SysConst.T_MSG_SYS_USERGROUPINFO + " where status='VALID' ");
        String yto_msg_sysinfo_id = userGroupInfoBean.getYto_msg_sysinfo_id();
        String yto_msg_usergroupid = userGroupInfoBean.getYto_msg_usergroupid();
        String yto_msg_userid = userGroupInfoBean.getYto_msg_userid();
        List<Object> args = new ArrayList<Object>();
        if (StringUtils.isNotBlank(yto_msg_sysinfo_id)) {
            sb.append(" and yto_msg_sysinfo_id=?");
            args.add(yto_msg_sysinfo_id);
        }
        if (StringUtils.isNotBlank(yto_msg_usergroupid)) {
            sb.append(" and yto_msg_usergroupid=?");
            args.add(yto_msg_usergroupid);
        }
        if (StringUtils.isNotBlank(yto_msg_userid)) {
            sb.append(" and yto_msg_userid=?");
            args.add(yto_msg_userid);
        }

        Map<String, String> sortMap = new HashMap<String, String>();
        sortMap.put("create_time", DESC);
        return (IPage<UserGroupInfoBean>) this.queryByPageMS(sb.toString(), args, queryPage.getPageSize(), queryPage.getPageIndex(), sortMap, new RowMapper<UserGroupInfoBean>() {
            public UserGroupInfoBean mapRow(ResultSet rs, int arg1) throws SQLException {
                UserGroupInfoBean userGroupInfoBean = new UserGroupInfoBean();
                userGroupInfoBean.setId(rs.getInt("id"));
                userGroupInfoBean.setYto_msg_sysinfo_id(rs.getString("yto_msg_sysinfo_id"));
                userGroupInfoBean.setYto_msg_usergroupid(rs.getString("yto_msg_usergroupid"));
                userGroupInfoBean.setYto_msg_userid(rs.getString("yto_msg_userid"));
                userGroupInfoBean.setCreate_time(rs.getTimestamp("create_time"));
                userGroupInfoBean.setUpdate_time(rs.getTimestamp("update_time"));
                return userGroupInfoBean;
            }
        });
    }

    @Override
    public boolean searchForUpdate(UserGroupInfoBean userGroupInfoBean) {
        return checkForUpdate(SysConst.T_MSG_SYS_USERGROUPINFO, DataTypeChangeTool.beanToMap(userGroupInfoBean));
    }

    @Override
    public int delete(UserGroupInfoBean userGroupInfoBean) {
        int result = 0;
        Map setMap = new HashMap();
        setMap.put("status", "INVALID");
        setMap.put("update_time", new Date());
        Map map = DataTypeChangeTool.beanToMap(userGroupInfoBean);
        String sys_remark = (String) map.remove("yto_msg_sys_remark");
        if (StringUtils.isNotBlank(sys_remark)) {
            setMap.put("yto_msg_sys_remark", sys_remark);
        }
        result = updateData(SysConst.T_MSG_SYS_USERGROUPINFO, setMap, map, false);
        return result;
    }

    @Override
    public int update(UserGroupInfoBean set, UserGroupInfoBean where) {
        int result = 0;
        Map setMap = DataTypeChangeTool.beanToMap(set);
        Map whereMap = DataTypeChangeTool.beanToMap(where);
        result = updateData(SysConst.T_MSG_SYS_USERGROUPINFO, setMap, whereMap, false);
        return result;
    }

    @Override
    public int add(UserGroupInfoBean userGroupInfoBean) {
        int result = 0;
        Map map = DataTypeChangeTool.beanToMap(userGroupInfoBean);
        result = insertData(SysConst.T_MSG_SYS_USERGROUPINFO, map);
        return result;
    }
}
